This patch just adds some extra parentheses to stop the compiler from
warning about the possible mix-up of operator precedence.

diff -u -r par2cmdline-0.4-orig/par1repairer.cpp par2cmdline-0.4/par1repairer.cpp
--- par2cmdline-0.4-orig/par1repairer.cpp	2004-04-15 15:40:48.000000000 +0200
+++ par2cmdline-0.4/par1repairer.cpp	2009-09-08 18:38:15.375114246 +0200
@@ -324,7 +324,7 @@
           ||
           (fileheader.datasize && (fileheader.dataoffset < sizeof(fileheader) || fileheader.dataoffset + fileheader.datasize > filesize))
           ||
-          (fileheader.datasize && (fileheader.filelistoffset <= fileheader.dataoffset && fileheader.dataoffset < fileheader.filelistoffset+fileheader.filelistsize || fileheader.dataoffset <= fileheader.filelistoffset && fileheader.filelistoffset < fileheader.dataoffset + fileheader.datasize)))
+          (fileheader.datasize && ((fileheader.filelistoffset <= fileheader.dataoffset && fileheader.dataoffset < fileheader.filelistoffset+fileheader.filelistsize) || (fileheader.dataoffset <= fileheader.filelistoffset && fileheader.filelistoffset < fileheader.dataoffset + fileheader.datasize))))
         break;
 
       // Check the size of the file list
@@ -518,9 +518,9 @@
       // Check the the file extension is the correct form
       if ((tail[0] == 'P' || tail[0] == 'p') &&
           (
-            (tail[1] == 'A' || tail[1] == 'a') && (tail[2] == 'R' || tail[2] == 'r')
+            ((tail[1] == 'A' || tail[1] == 'a') && (tail[2] == 'R' || tail[2] == 'r'))
             ||
-            isdigit(tail[1]) && isdigit(tail[2])
+            (isdigit(tail[1]) && isdigit(tail[2]))
           ))
       {
         LoadRecoveryFile(filename);
@@ -549,9 +549,9 @@
       // Check the the file extension is the correct form
       if ((tail[0] == 'P' || tail[0] == 'p') &&
           (
-            (tail[1] == 'A' || tail[1] == 'a') && (tail[2] == 'R' || tail[2] == 'r')
+            ((tail[1] == 'A' || tail[1] == 'a') && (tail[2] == 'R' || tail[2] == 'r'))
             ||
-            isdigit(tail[1]) && isdigit(tail[2])
+            (isdigit(tail[1]) && isdigit(tail[2]))
           ))
       {
         LoadRecoveryFile(filename);
@@ -652,9 +652,9 @@
       // Check the the file extension is the correct form
       if ((tail[0] == 'P' || tail[0] == 'p') &&
           (
-            (tail[1] == 'A' || tail[1] == 'a') && (tail[2] == 'R' || tail[2] == 'r')
+            ((tail[1] == 'A' || tail[1] == 'a') && (tail[2] == 'R' || tail[2] == 'r'))
             ||
-            isdigit(tail[1]) && isdigit(tail[2])
+            (isdigit(tail[1]) && isdigit(tail[2]))
           ))
       {
         skip = true;
diff -u -r par2cmdline-0.4-orig/verificationhashtable.h par2cmdline-0.4/verificationhashtable.h
--- par2cmdline-0.4-orig/verificationhashtable.h	2003-06-03 13:48:52.000000000 +0200
+++ par2cmdline-0.4/verificationhashtable.h	2009-09-08 18:37:51.945290947 +0200
@@ -66,11 +66,11 @@
   // Comparison operators for searching
   bool operator <(const VerificationHashEntry &r) const 
   {
-    return crc < r.crc || crc == r.crc && hash < r.hash;
+    return crc < r.crc || (crc == r.crc && hash < r.hash);
   }
   bool operator >(const VerificationHashEntry &r) const 
   {
-    return crc > r.crc || crc == r.crc && hash > r.hash;
+    return crc > r.crc || (crc == r.crc && hash > r.hash);
   }
   bool operator ==(const VerificationHashEntry &r) const 
   {
@@ -183,11 +183,11 @@
 
   while (entry)
   {
-    if (entry->crc < crc || entry->crc == crc && entry->hash < hash)
+    if (entry->crc < crc || (entry->crc == crc && entry->hash < hash))
     {
       entry = entry->right;
     }
-    else if (entry->crc > crc || entry->crc == crc && entry->hash > hash)
+    else if (entry->crc > crc || (entry->crc == crc && entry->hash > hash))
     {
       entry = entry->left;
     }
@@ -402,14 +402,14 @@
     // have already been matched, or ones that are the wrong length
     while (currententry && (currententry->SourceFile() != sourcefile || 
                             currententry->IsSet() ||
-                            checksummer.ShortBlock() && checksummer.BlockLength() != currententry->GetDataBlock()->GetLength()
+                            (checksummer.ShortBlock() && checksummer.BlockLength() != currententry->GetDataBlock()->GetLength())
                            )
           )
     {
       // If we found an unused entry (which was presumably for the wrong 
       // source file) remember it (providing it is the correct length).
       if (0 == nextentry && !(currententry->IsSet() || 
-                              checksummer.ShortBlock() && checksummer.BlockLength() != currententry->GetDataBlock()->GetLength()
+                              (checksummer.ShortBlock() && checksummer.BlockLength() != currententry->GetDataBlock()->GetLength())
                              )
          )
       {
@@ -426,7 +426,7 @@
 
   // Check for an unused entry which is the correct length
   while (nextentry && (nextentry->IsSet() ||
-                       checksummer.ShortBlock() && checksummer.BlockLength() != nextentry->GetDataBlock()->GetLength()
+                       (checksummer.ShortBlock() && checksummer.BlockLength() != nextentry->GetDataBlock()->GetLength())
                       )
         )
   {
